﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Libreria.DAL;

namespace Libreria.SIG.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer)]
    public class IngredientesDeReceta
    {
        // Atributo de abstracción
        private MOR accesoADatos;
        // Atributo de la clase
        private Int32? codigo;
        private Int32? codigoReceta;
        private String tipoDeAsociacion;
        private Int32? codigoAsociado;
        private Int32? cantidad;

        //Constructores
        public IngredientesDeReceta()
        {
        }

        public IngredientesDeReceta(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

        // Encapsulamiento de los atributos
        // Encapsulamiento de los atributos
        [Tipo(Tipo.TiposSQLServer._int, "codigoIngredienteDeReceta", true, true)]
        public Int32? Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
                
        [Tipo(Tipo.TiposSQLServer._int, "codigoReceta", true, false)]
        public Int32? CodigoReceta
        {
            get { return codigoReceta; }
            set { codigoReceta = value; }
        }

        [Tipo(Tipo.TiposSQLServer._int, "codigoAsociado", true, false)]
        public Int32? CodigoAsociado
        {
            get { return codigoAsociado; }
            set { codigoAsociado = value; }
        }

        [Tipo(Tipo.TiposSQLServer._varchar, "tipoDeAsociacion", true, false)]
        public String TipoDeAsociacion
        {
            get { return tipoDeAsociacion; }
            set { tipoDeAsociacion = value; }
        }

        [Tipo(Tipo.TiposSQLServer._int)]
        public Int32? Cantidad
        {
            get { return cantidad; }
            set { cantidad = value; }
        }

        // Métodos de abstracción de datos
        public void crear()
        {
            this.accesoADatos.crearRegistro(this);
        }

        public List<IngredientesDeReceta> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<IngredientesDeReceta> resultado = new List<IngredientesDeReceta>();
            foreach (Object registro in registros)
            {
                resultado.Add((IngredientesDeReceta)registro);
            }
            return resultado;
        }


        public List<IngredientesDeReceta> consultarIngredientes(Int32 CodigoReceta)
        {
            this.CodigoReceta = CodigoReceta;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<IngredientesDeReceta> resultado = new List<IngredientesDeReceta>();
            foreach (Object registro in registros)
            {
                resultado.Add((IngredientesDeReceta)registro);
            }
            return resultado;
        }

        public void actualizar()
        {
            this.accesoADatos.actualizarRegistro(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }

    }
}
